package com.kld.common.webServiceUtil;
import cn.hutool.core.util.XmlUtil;
import com.kld.common.utils.JsonUtils;
import com.kld.common.webServiceUtil.sms.ISmsService;
import com.kld.common.webServiceUtil.sms.ISmsServicePortType;
import org.w3c.dom.Document;

import javax.xml.xpath.XPathConstants;
import java.util.HashMap;
import java.util.Map;

public class smsClientUtil {
    //sysname 是在短信平台注册后，获取的。
    private  static String sysName = "59abfea4";
    /*
    *   发送短信的具体方法，调用的其他业务类是用idea生成的wsdl。
    *   但是这个webservice的wsdl不完整，生成的object没有属性
    *   所以此处还是手工做了xml模板来传递参数。
    *   如果未来接口地址发生变换，需要重新生成sms下的文件
    *
    *   @param dest 目标手机号，多个用逗号隔开拼成一个字符串
    *   @param messgae 此处是已经确认的需要发送的信息内容。
    *
    *     * @return result
     * result.return   0 为成功，1为失败
     * result.description  成功时为短信ID（发送成功则返回短信id，可根据此id查询短信回执状态）失败时为失败原因
     * result.xmlstr 原始接口返回的xml字符串
     */
    public static Map<String, Object> sendMessage(String dest,String message){
        //xml模板
        String xml = "<?xml version='1.0' encoding='utf-8'?>" +
            "<msg>" +
            "<sysname>#{SYSNAME}</sysname>" +
            "<sms>" +
            "<code>油气研究智能辅助系统</code>"+
            "<src>国资在线监管系统</src>" +
            "<dest>#{DEST}</dest>" +
            "<message><![CDATA[ #{MESSAGE} ]]></message>" +
            "</sms>" +
            "</msg>";
        xml = xml.replaceAll("#\\{SYSNAME\\}",sysName)
            .replaceAll("#\\{DEST\\}",dest)
            .replaceAll("#\\{MESSAGE\\}",message);
        //System.out.println(xml);
        String str = "";
        ISmsService smsService = new ISmsService();
        ISmsServicePortType portType = smsService.getISmsServiceHttpPort();
        str = portType.sendMessage(xml);
        Map<String, Object> result = new HashMap<>(3);
        Document docResult=XmlUtil.readXML(str);
        result.put("return", XmlUtil.getByXPath("//msg/return",docResult, XPathConstants.STRING));
        result.put("description", XmlUtil.getByXPath("//msg/description",docResult, XPathConstants.STRING));
        result.put("xmlstr",str);
        return result;
    }

    /*获取回执操作
    * @param ids 是发送方法返回的一串ID，多个用逗号隔开，以此来查看回执情况
    *
    * 回执是运营商返回给短信平台的，有事会有延迟，有时会获取不到，使用此方法需谨慎
    *
    * @return result
    * result.return   0 为成功，1为失败
    * result.description  成功时为回执信息（
    *       mobile：接收人手机号
    *        submitDate：提交时间
    *        reportStatus：短信提交状态
    *        receiveDate：回执接收时间
    *        errorCode：回执代码，DELIVRD表示手机已接收到短信
     *       msgGroup：调用发送短信方法后返回的id id:此id参数为短信平台保存id，可忽略）
     *        失败时为失败原因
     * result.xmlstr 原始接口返回的xml字符串
    */
    public static Map<String, Object> receiveReport(String ids){
        //xml模板
        String xml = "<?xml version='1.0' encoding='utf-8'?> " +
            "<msg>" +
            "<sysname>#{SYSNAME}</sysname> " +
            "<ids>#{IDS}</ids> " +
            "</msg>";
        xml = xml.replaceAll("#\\{SYSNAME\\}",sysName)
            .replaceAll("#\\{DEST\\}",ids);
        String str = "";
        ISmsService smsService = new ISmsService();
        ISmsServicePortType portType = smsService.getISmsServiceHttpPort();
        str = portType.receiveReport(xml);
        Map<String, Object> result = new HashMap<>(3);
        Document docResult=XmlUtil.readXML(str);
        result.put("return", XmlUtil.getByXPath("//msg/return",docResult, XPathConstants.STRING));
        result.put("description", XmlUtil.getByXPath("//msg/description",docResult, XPathConstants.STRING));
        result.put("xmlstr",str);
        return result;
    }


    public static void main(String[] args) {
//        Map<String, Object> result = smsClientUtil.sendMessage("18629012967","oooooooceshiceshi");
//        System.out.println(result.get("xmlstr"));
        Map<String, Object> result = smsClientUtil.receiveReport("2c9886837f4807d80182147846cf3e94");
        System.out.println(result.get("xmlstr"));
    }
}
